import mido

def parse_midi(file_path):
    # 打开MIDI文件
    midi = mido.MidiFile(file_path)

    note_events = []

    # 遍历所有轨道中的信息
    for track in midi.tracks:
        time_elapsed = 0  # 用于计算累计时间
        for msg in track:
            time_elapsed += msg.time
            # 只处理钢琴按键的消息类型
            if msg.type == 'note_on' or msg.type == 'note_off':
                note_events.append({
                    'note': msg.note,  # 按键值 (MIDI 标准的音高值)
                    'velocity': msg.velocity,  # 力度 (0 表示抬键，>0 表示按键)
                    'time': time_elapsed  # 按键的时间（累计时间）
                })
    
    return note_events

# 使用示例
file_path = 'res/zuichangdidianying.mid'
# file_path = 'res/qilixiang.mid'
events = parse_midi(file_path)

notes = []
# 打印每个按键事件
for event in events:
    print(f"Note: {event['note']}, Velocity: {event['velocity']}, Time: {event['time']}")
    notes.append(event['note'])

# print(notes)
setnotes = set(notes)
print(len(setnotes),setnotes)